package com.gqr.syc;

/*
* 两个线程同时i++， 最后结果会比预计的少
* 原因：
*   i++，虽然是一行代码，但是实际上至少包含了以下三个动作：
*     1. 读取i的值
*     2. 计算i+1的值
*     3. 把i+1的计算结果写回到内存中，赋给i
* */
public class ShowUnsafe1 implements Runnable {
    static ShowUnsafe1 r = new ShowUnsafe1();
    static int i = 0;

    @Override
    public void run() {
        for (int j = 0; j < 100000; j++) {
            i++;
        }
    }


    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(r);
        Thread t2 = new Thread(r);
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        System.out.println(i);
    }
}
